package export

import (
	"bytes"
	"encoding/csv"
	"fmt"
	"time"
)

func GenerateCSV(stats map[string]interface{}) ([]byte, string, error) {
	// 实现CSV导出逻辑
	var buf bytes.Buffer
	writer := csv.NewWriter(&buf)
	writer.UseCRLF = true // 兼容Windows换行

	// 写入表头
	if err := writer.Write([]string{"统计项", "数值"}); err != nil {
		return nil, "", fmt.Errorf("写入表头失败: %w", err)
	}

	// 处理基础统计数据
	for key, value := range stats {
		// 处理嵌套map
		if nestedMap, ok := value.(map[string]int); ok {
			for nestedKey, nestedValue := range nestedMap {
				combinedKey := fmt.Sprintf("%s-%s", key, nestedKey)
				if err := writer.Write([]string{
					combinedKey,
					fmt.Sprintf("%d", nestedValue),
				}); err != nil {
					return nil, "", fmt.Errorf("写入嵌套map数据失败: %w", err)
				}
			}
			continue
		}

		// 处理切片
		if sliceData, ok := value.([]int); ok {
			for i, item := range sliceData {
				combinedKey := fmt.Sprintf("%s-%d", key, i+1)
				if err := writer.Write([]string{
					combinedKey,
					fmt.Sprintf("%d", item),
				}); err != nil {
					return nil, "", fmt.Errorf("写入切片数据失败: %w", err)
				}
			}
			continue
		}

		// 处理基础类型
		valueStr := fmt.Sprintf("%v", value)
		if err := writer.Write([]string{key, valueStr}); err != nil {
			return nil, "", fmt.Errorf("写入基础数据失败: %w", err)
		}
	}

	// 确保所有数据都写入缓冲区
	writer.Flush()
	if err := writer.Error(); err != nil {
		return nil, "", fmt.Errorf("CSV写入错误: %w", err)
	}

	// 生成文件名
	filename := fmt.Sprintf("statistics_%s.csv", time.Now().Format("20060102150405"))

	return buf.Bytes(), filename, nil
}
